var DT = {
    version : '1.0',
    
    // DT所在的路径，相对于引用页面
    pathname : 'DT/',

    // 模块依赖关系表
    dependency : {
        'desktop' : []
    },

    /**
     * 加载指定的模块
     * @param {String} [module] 要加载的模块，可以为多个模块
     * @param {Function} [callback] 回调函数
     */
    load : function(module/* [, module] */, callback) {

    }
};

// 模块管理器，通过guid来将桌面中的模块关联起来。
// 在Page中创建Shortcut时自动获取。
// 在Taskbar中仅对type=eternal的创建guid，而type=running的将从Shortcut中获取
DT.moduleManager       = {
    _seed  : 1,
    _cache : [],

    /**
     * 获取一个GUID
     * @return {String} 自动生成一个guid并且返回
     */
    getGUID : function() {
        return 'dt-guid-' + (this._seed++);
    },

    // 获取缓存的所有的对象
    getCache : function() {
        return this._cache;
    },

    /**
     * 根据guid获取指定的模块引用
     * @param {String} guid 要查找的guid
     * @param {String} objName 要返回的对象名称，可以为：desktop/page/taskbar/taskbaricon/shortcut/window/browser/box
     * @return {Object} 如果查找到返回此对象，否则返回null
     */
    getHandler : function(guid, objName) {
        if (!guid || !objName) { return null; }

        guid    = guid.toLowerCase();
        objName = objName.toLowerCase();

        var cache = this._cache || [];

        for (var i = 0, len = cache.length; i < len; ++i) {
            if (cache[i].guid == guid) {
                return cache[i][objName] || null;
            }
        }

        return null;
    },

    /**
     * 根据guid进行缓存模块，如果当前模块的引用已经被缓存过则覆盖
     * @param {String} guid 要查找的guid
     * @param {String} objName 要返回的对象名称，可以为：page/taskbar/taskbaricon/shortcut/window/browser/box
     * @param {Object} obj 要缓存的模块对象
     * @return {Boolean} 如果guid/objName/obj有一个为空或null则返回false
     */
    setHandler : function(guid, objName, obj) {
        if (!guid || !objName || !obj) { return false; }

        guid    = guid.toLowerCase();
        objName = objName.toLowerCase();

        var cache = this._cache;

        for (var i = 0, len = cache.length; i < len; ++i) {
            if (cache[i].guid == guid) {
                cache[i][objName] = obj;
                return true;
            }
        }

        // 缓存列表中不存在当前的guid对象，增加之
        var tmp = { guid : guid };

        tmp[objName] = obj;
        cache.push(tmp);

        tmp = null;

        return true;
    },

    /**
     * 根据GUID来删除
     */
    remove : function(guid) {
        var cache = this._cache;

        for (var i = cache.length - 1; i >= 0; --i) {
            if (cache[i].guid == guid) {
                cache[i] = null;
                cache.splice(i, 1);
                return true;
            }
        }

        return false;
    }
};

DT.TASKBAR_HEIGHT         = 40;         // 任务栏高度
DT.TASKBAR_ICON_WIDTH     = 50;         // 被钉在任务栏上的常驻图标的宽度
DT.TASKBAR_TITLE_WIDTH    = 150;        // 运行中的图标的宽度，因为是带有标题，因此多出100px
DT.WINDOW_TITLEBAR_HEIGHT = 20;         // Window/Browser的标题栏的高度
DT.TAB_HEIGHT             = 30;         // Browser中标签的高度
DT.BOX_MAX_DEEP           = 90000;      // 最大深度，即最大化时的深度
DT.BoxDeep                = 30000;      // 窗口初始深度，即z-index

DT.taskbarInstance        = null;       // 桌面中就一个taskbar对象，因此直接缓存。